# -*- coding: utf-8 -*-
"""
@Time    : 2024/7/4 13:48 
@Author  : ZhangShenao 
@File    : traverse.py 
@Desc    : 遍历操作
所有可迭代对象(Iterable)都是可遍历的,遍历的语法是:
for item in Iterable:
    print(item)

因为range()函数底层是C语言编写的,它的执行效率非常高
因此在大多数场景下,推荐使用for-range方式来遍历集合,性能会比while循环更高
"""

# 遍历字符串
print('遍历字符串:')
for c in 'abcdefg':
    print(c, end='\t')
print()

# 遍历列表
print('遍历列表:')
for item in [1, 2, 3, 4, 5]:
    print(item, end='\t')
print()

# 对于字典来说,只有key是可遍历的
# 如果想要遍历value和key-value对,需要分别使用dict的函数values()和items()
user = {'name': 'zsa', 'age': 18, 'hobbies': ['coding', 'reading', 'singing']}
print('按照key遍历字典:')
for k in user:
    print(k, end='\t')
print()
print('按照value遍历字典:')
for v in user.values():
    print(v, end='\t')
print()
print('按照key-value对遍历字典:')
for k, v in user.items():
    print(f'{k}->{v}', end='\t')
print()

# 使用索引遍历列表
# 通过range()函数,可以拿到列表的索引
nums = [1, 2, 3, 4, 5]
print('使用range()函数,按照索引遍历列表:')
for i in range(0, len(nums)):
    print(f'nums[i]={nums[i]}', end='\t')
print()

# 使用内置的enumerate()函数,可以同时拿到索引和值
print('使用enumerate()函数,按照索引和值遍历列表:')
for i, v in enumerate(nums):
    print(f'nums[{i}]={v}', end='\t')
print()

# 使用while循环遍历列表
print('使用while循环遍历列表:')
i = 0
while i < len(nums):
    print(f'nums[{i}]={nums[i]}', end='\t')
    i += 1
print()
